home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / encoders / Countdown.pm < prev    next >
Text File  |  2006-06-30  |  2KB  |  66 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Encoder::Countdown;
  11. use strict;
  12. # XXX:
  13. use base 'Msf::Encoder::XorDword';
  14. use Pex::x86;
  15.  
  16. my $advanced = {
  17. };
  18.  
  19. my $info = {
  20.   'Name'    => 'x86 Call $+4 countdown xor encoder',
  21.   'Version' => '$Revision: 1.2 $',
  22.   'Authors' =>
  23.     [
  24.       'vlad902 <vlad902 [at] gmail.com>',
  25.     ],
  26.   'Arch'    => [ 'x86' ],
  27.   'OS'      => [ ],
  28.   'Description'  =>  'Tiny countdown byte xor encoder',
  29.   'Refs'    => [ ],
  30. };
  31.  
  32. sub new {
  33.   my $class = shift; 
  34.   return($class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_));
  35. }
  36.  
  37. sub EncodePayload {
  38.   my $self = shift;
  39.   my $payload = shift;
  40.   my $badchars = shift;
  41.  
  42.   my $decoder =
  43.     Pex::x86::Mov(length($payload) - 1, "ecx", $badchars).
  44.     "\xe8\xff\xff\xff".            # call $+4
  45.     "\xff\xc1".                # inc ecx
  46.     "\x5e".                # pop esi
  47.     "\x30\x4c\x0e\x07".             # xor_xor: xor [esi + ecx + 0x07], cl 
  48.     "\xe2\xfa";                # loop xor_xor
  49.     
  50.   return($decoder . CountdownXor($payload));
  51. }
  52.  
  53. sub CountdownXor {
  54.   my @payload = split('', shift); 
  55.   my $xored;
  56.  
  57.   for(my $count=0; $count < scalar @payload; $count++)
  58.   {
  59.     $xored .= pack("C", (unpack("C", $payload[$count]) ^ ($count + 1)));
  60.   }
  61.  
  62.   return $xored;
  63. }
  64.  
  65. 1;
  66.